package A10正则表达式;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String qq="3170326695";
        String text="Java8,JAva,Java11,java,zz,abbbbbbbbbbbb";
        if(Check(qq)){
         System.out.println("111");
        }
        if(qq.matches("[1-9]\\d{6,18}")){//和下面一整个方法作用一样
            System.out.println("222");
        }
        String str1="(?i)Java(?=8|11|17)";//?i表示忽略大小写，第二个？为占位符，=代表其后面连接的字符,这种结构表示只获取前半部分,且必须有8，11，17
        String str2="(?i)Java(8|11|17)";//打印Java加版本号
        String str3="(?i)Java(?:8|11|17)";//等同str2
        String str4="(?i)Java(8|11|17){0,1}";
        String str5="(?i)Java(?!8|11|17)";//除了含8 11 17的其他Java

        //接下来是贪婪爬取和非贪婪爬取
        //贪婪爬取 + *尽可能多的爬取  非贪婪爬取 +? *？尽可能少的爬取
        String str6="ab+";
        String str7="ab+?";
        String str8="ab";

        Pattern p= Pattern.compile(str8);//获取正则表达式对象
        Matcher m= p.matcher(text);//匹配器
        while(m.find()){//如果能找到符合条件的字符串会返回true，反之返回false
            System.out.println(m.group());//打印匹配器获取的内容
        }


        //捕获分组把组分好后还会用$调用，非捕获分组则只是分组（？：获取全部）（？= 获取前面部分）(?! 不是指定内容的前面部分)
        //捕获分组，和非捕获分组
        //组号\\x.x是组
        String temp2="abbsba";//捕获一个
        String temp3="aabbaa";//捕获多个
        String str10="(.).+\\1";
        String str11="(.+).+\\1";
        Pattern p1=Pattern.compile(str10);
        Matcher m1=p1.matcher(temp2);
        while(m1.find()){
            System.out.println(m1.group());
        }
        //字符串方法 1.判断是否匹配temp.matches(str9); 2.替换
        String temp1="a123456879b13545863c";
        String str9="[0-9]+";
        String result1=temp1.replaceAll(str9,".");
        System.out.println(result1);
        String result2=temp1.replaceAll("([a-z])[0-9]*","$1");
        System.out.println(result2);
        String[] arr=temp1.split("[0-9]+");
        /*
        for (int i = 0; i < arr.length; i++) {

            System.out.println(arr[i]);
        }

         */
        /*具体用法
        [abc]只能是abc
        [^abc]除了abc
        [a-z]a-z,包括az
        [a-b[b-c]]a-b或b-c
        [a-z&&[abc]]
        字符类
        以上只能匹配一个字符
        .   所有字符
        \d  数字
        \D  非数字
        \s  空白字符
        \S  非空白字符
        \w  英文数字下划线
        \W  非单词字符
        预定义字符
        ？零或一次
        *零或多次
        +一次或多次
        {n}正好n次
        {n,}至少n次
        {n,m}至少n，不大于m
        次数词
         */
    }



    public static boolean Check(String temp){//代码太过复杂，所以要用到正则运算式
        int len=temp.length();
        if(len<6||len>18){
            return false;
        }
        if(temp.charAt(0)=='0'){
            return false;
        }
        for(int i=0;i<len;i++){
            char c=temp.charAt(i);
            if(c<'0'||c>'9'){
                return false;
            }
        }
        return true;
    }
}
